//
//  ZHEncrypt.h
//  ZHEncrypt
//
//  Created by luodp on 2018/1/12.
//  Copyright © 2018年 coreShield. All rights reserved.
//



#import <Foundation/Foundation.h>
#import <GTMBase64/GTMBase64.h>

@interface ZHEncrypt : NSObject

#pragma mark - data

//+ (NSData *)encryptData:(NSData *)data encryptOrDecrypt:(CCOperation)encryptOperation key:(NSData *)key;

+ (NSData *)DESEncryptWithData:(NSData *)data theKey:(NSData *)aKey;

+ (NSData *)DESDecryptWithData:(NSData *)data theKey:(NSData *)aKey;

+ (NSData *)DES3EncryptWithData:(NSData *)data theKey:(NSData *)key;

+ (NSData *)DES3DecryptWithData:(NSData *)data theKey:(NSData *)key;

+ (NSData *)AES128EncryptWithData:(NSData *)data theKey:(NSData *)key;

+ (NSData *)AES128DecryptWithData:(NSData *)data theKey:(NSData *)key;

+ (NSData *)AES256EncryptWithData:(NSData *)data theKey:(NSData *)key;

+ (NSData *)AES256DecryptWithData:(NSData *)data theKey:(NSData *)key;


#pragma mark - string
/**
 des加密使用key
 
 @param sText 未加密的文本
 @param aKey  key
 
 @return 加密过后经过base64编码的文本
 */
+ (NSString *)DESEncryptWithText:(NSString *)sText theKey:(NSString *)aKey;

/**
 des解密使用key
 
 @param sText 经过base64编码过后的文本
 @param aKey  key
 
 @return 明文
 */
+ (NSString *)DESDecryptWithText:(NSString *)sText theKey:(NSString *)aKey;

/**
 3des加密方式
 
 @param stext 明文
 @param key key 必须超过24个字节，否则会出现加密完成之后无法解密的现象
 @return 密文
 */
+ (NSString *)DES3EncryptWithText:(NSString *)stext theKey:(NSString *)key;

/**
 3des解密
 
 @param stext 明文
 @param key key 必须超过24个字节，否则会出现加密完成之后无法解密的现象
 @return 密文
 */
+ (NSString *)DES3DecryptWithText:(NSString *)stext theKey:(NSString *)key;

/**
 AES加密
 
 @param stext 密文
 @param key key
 @return 明文
 */
+ (NSString *)AES128EncryptWithText:(NSString *)stext theKey:(NSString *)key;

+ (NSString *)AES256EncryptWithText:(NSString *)stext theKey:(NSString *)key;


/**
 AES解密
 
 @param stext 密文
 @param key key
 @return 明文
 */
+ (NSString *)AES128DecryptWithText:(NSString *)stext theKey:(NSString *)key;

+ (NSString *)AES256DecryptWithText:(NSString *)stext theKey:(NSString *)key;


/**
 加密字符串
 
 @param sText 需要加密的字符串
 @param encryptOperation 加密或者解密
 @param key key
 @param algorithm 算法类型
 @param keySize key大小
 @return 返回值
 */
//+ (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(NSString *)key CCAlgorithm:(CCAlgorithm)algorithm keySize:(NSUInteger)keySize;

/**
 加密/解密字符串
 
 @param sText 需要加密的字符串
 @param encryptOperation 加密或者解密
 @param key key
 @return 加密或者解密之后的字符串
 */
//+ (NSString *)encrypt:(NSString *)sText encryptOrDecrypt:(CCOperation)encryptOperation key:(NSString *)key;

/**
 *  异或加密算法//加密算法就是解密算法
 *
 *  @param data 需要加密的字节流
 *  @param key  加密的key
 *
 *  @return 加密后的字节流
 */
+ (NSData *)XOREncodeData:(NSData *)data key:(NSData *)key ;

@end
